Analyseur de Trafic Réseau et Détection d'Anomalies 📡🛡️

Ce tutoriel explique comment créer un analyseur de trafic réseau en Python avec Scapy et y ajouter des fonctionnalités de détection d'anomalies comme des scans de ports, attaques DDoS ou comportements suspects. Ce guide est destiné aux administrateurs réseau, chercheurs en cybersécurité, ou toute personne souhaitant surveiller le trafic réseau de manière proactive.

Fonctionnalités du Programme :

Pré-requis :

Code Python (Avancé) :

Ce code est un analyseur de trafic réseau capable de détecter plusieurs types d'anomalies et de sauver les paquets dans un fichier PCAP.


import scapy.all as scapy
from scapy.layers.inet import IP, TCP, UDP, ICMP
from collections import defaultdict
import time

# Dictionnaire pour garder une trace des scans de port détectés
scan_detected = defaultdict(int)

def packet_callback(packet):
    if packet.haslayer(IP):
        ip_src = packet[IP].src
        ip_dst = packet[IP].dst
        protocol = packet[IP].proto

        print(f"Paquet capturé : Source={ip_src}, Destination={ip_dst}, Protocole={protocol}")

        # Détection de scans de ports
        if packet.haslayer(TCP):
            if packet[TCP].flags == "S":  # SYN flag - début d'une connexion
                scan_detected[ip_src] += 1
                print(f"ALERTE : Scan de port détecté provenant de {ip_src}")

            # Détection DDoS basique : trop de paquets SYN en peu de temps
            if scan_detected[ip_src] > 100:
                print(f"ALERTE CRITIQUE : Potentielle attaque DDoS de {ip_src}")
        
        # Détection d'autres types d'anomalies réseau (UDP flood par exemple)
        if packet.haslayer(UDP):
            print(f"Paquet UDP détecté de {ip_src} vers {ip_dst}")

def start_packet_sniffing(interface="eth0"):
    print(f"Capture des paquets sur l'interface {interface}...")
    scapy.sniff(iface=interface, prn=packet_callback, store=False)

def save_packet(packet, filename="traffic_capture.pcap"):
    scapy.wrpcap(filename, packet)
    print(f"Paquet sauvegardé dans {filename}")

if __name__ == "__main__":
    interface = input("Entrez l'interface réseau à surveiller (par défaut eth0) : ") or "eth0"
    print(f"Surveillance du trafic réseau sur l'interface {interface}")
    
    try:
        start_packet_sniffing(interface)
    except KeyboardInterrupt:
        print("\nCapture interrompue.")

Manuel d'Utilisation :

🚀 Lancer le Programme :

Pour exécuter le programme, vous devez utiliser un terminal avec les privilèges administratifs nécessaires pour capturer les paquets réseau :

sudo python3 analyseur_trafic_reseau.py

⚙️ Options Disponibles :

Exemple de Sortie (CLI) :


Capture des paquets sur l'interface eth0...
Paquet capturé : Source=192.168.1.10, Destination=192.168.1.1, Protocole=6
Paquet TCP détecté de 192.168.1.10 vers 192.168.1.1
ALERTE : Scan de port détecté provenant de 192.168.1.10
ALERTE CRITIQUE : Potentielle attaque DDoS de 192.168.1.10
        

⚠️ Attention Éthique :

Ce programme doit être utilisé de manière légale et éthique. L'utilisation non autorisée d'outils de surveillance réseau est illégale dans de nombreux pays. Ce tutoriel est destiné à des usages éducatifs, des audits de sécurité, ou des environnements contrôlés où l'utilisateur a l'autorisation de surveiller le réseau. Veillez à obtenir les autorisations nécessaires avant de capturer du trafic réseau.

Fonctionnalités Avancées :

📈 Ajout de la Visualisation des Anomalies :

Pour aller plus loin, vous pouvez ajouter une fonction de visualisation des anomalies détectées à l'aide de bibliothèques comme matplotlib pour générer des graphiques du nombre de paquets capturés ou des IP suspectes.

import matplotlib.pyplot as plt

def plot_anomalies(scan_detected):
    ips = list(scan_detected.keys())
    counts = list(scan_detected.values())
    
    plt.bar(ips, counts)
    plt.xlabel('Adresse IP')
    plt.ylabel('Nombre de Scans Détectés')
    plt.title('Détection de Scans de Ports')
    plt.show()

📁 Analyse des Captures PCAP :

Vous pouvez également étendre le programme pour analyser des fichiers .pcap capturés précédemment. Cela permet d'effectuer des audits de sécurité hors ligne.


def analyze_pcap(file):
    packets = scapy.rdpcap(file)
    for packet in packets:
        packet_callback(packet)